#ifndef		__keyboard
#define		__keyboard

/*Tama�o del buffer que guarda los caracteres*/
#define KEY_BUFFER_SIZE 1024

//Scancode de para tecla apretada (makecode)
#define MAKECODE	0x0000
//Scancode de para tecla soltada (breakcode) 
#define BREAKCODE 	0x0080

//Scancode de teclas especiales
#define ESC 		0x0001
#define ENTER	 	0x001c
#define LSHIFT		0x002a
#define RSHIFT		0x0036
#define CAPSLOCK	0x003a 
#define BACKSPACE	0x00e0
#define SPACEBAR	0x0039
#define ACCENT		0x0028
#define LCTRL		0x001d
#define RCTRL		0xe01d



#define		MAX_SCANCODE		0x53	/* Ultimo valor de scancode */
/* Algunos scancodes significativos */
#define		BS_SCANCODE		0x0E
#define		ENTER_SCANCODE		0x1C
#define		LSHIFT_SCANCODE		0x2A
#define		RSHIFT_SCANCODE		0x36
#define		SPACE_SCANCODE		0x39
#define		CAPS_SCANCODE		0x3A


/* Macros para detectar algunos scancodes significativos */
#define		IS_LSHIFT(c)	((c) == LSHIFT_SCANCODE)
#define		IS_RSHIFT(c)	((c) == RSHIFT_SCANCODE)
#define		IS_BS(c)	((c) == BS_SCANCODE)
#define		IS_ENTER(c)	((c) == ENTER_SCANCODE)
#define		IS_CAPS(c)	((c) == CAPS_SCANCODE)
#define		IS_SPACE(c)	((c) == SPACE_SCANCODE)

/*Cantidad de teclados soportados*/
#define NUM_SUPPORTED_KEYBOARDS 2

/*Tipos de teclados soportados*/
#define US_KEYBOARD		0
#define LATIN_KEYBOARD 	1


/*Numero de mapeos. Depende de la cantidad de teclas especiales consideradas*/
#define NUM_MAPPINGS 			4	
/*Tipos de mapeos*/
#define		NORMAL			0	
#define		CAPS_LOCK_PRESSED	1	
#define		SHIFT_PRESSED		2
#define		ACCENT_PRESSED		3

#define 	NUM_KEYS			127

/*Algunos casos especiales*/
#define ASCII_ERROR		0	
#define ASCCI_ESC		27
#define ASCII_CTRL		0
#define ASCII_ENIE		126
#define ASCII_LSHIFT		0
#define ASCII_RSHIFT 		0
#define ASCII_PRTSC		0
#define ASCII_RALT		0
#define ND				0 /*No definido*/

#define S_ESC 		0x01
#define S_ENTER	 	0x02
#define S_LSHIFT	0x04
#define S_RSHIFT	0x08
#define S_CAPSLOCK	0x10 
#define S_ACCENT	0X20
#define S_CTRL		0X40



int isKeyPressed(int code);
int processSpecial(int code);
char toAscii(int code);

void addToKeyBuffer(char ascii);
char* getKeyBuffer(void);
void freeKeyBuffer(void);
char getKeyBufferHead(void);
void setKeyBoard(int kb);
char getEspecials();

#endif

